package 进阶阶段;

import java.io.File;
import java.io.IOException;

public class demo18File文件类 {
    public static void main(String[] args) throws IOException {
        //File类：文件和目录(文件夹)路径名的抽象表示，主要用于文件和目录的创建、查找和删除等操作。
        //d:\a  表示文件夹a
        //d:\a.txt  表示a文本文件
        String path = "d:\\a";
        String path1 = "d:\\a.txt ";

        File f = new File(path);
        File f1 = new File(path1);
        System.out.println(f.exists());
        System.out.println(f1.exists());

        System.out.println("---------------------------------");

        //构造方法
        //File(String pathname)：通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
        //File(String parent, String child)：从父路径名字符串和子路径名字符串创建新的File实例。
        //File(File parent, String child)：从父抽象路径名和子路径名字符串创建新的File实例。

        // 文件路径名
        String pathname2 = "D:\\aaa\\bbb.txt";
        File file2 = new File(pathname2);
        System.out.println(file2);

        // 通过父路径和子路径字符串
        String parent = "D:\\aaa";
        String child = "bbb.txt";
        File file3 = new File(parent, child);
        System.out.println(file3);

        // 通过父级File对象和子路径字符串
        File parentDir = new File("D:\\aaa");
        String child1 = "bbb.txt";
        File file4 = new File(parentDir, child1);
        System.out.println(file4);

        System.out.println("---------------------------------");

        //常用方法
        //getAbsolutePath()：返回此File的绝对路径名字符串。带有盘符,比如D:\\a.png;
        //getPath()：返回此File类构造方法传入的路径名字符串。
        //getName()：返回由此File表示的文件或文件夹的名称。
        //length()：返回由此File表示的文件的长度,大小,不能获取文件夹的大小

        System.out.println(f.getAbsoluteFile());
        System.out.println(f.getPath());
        System.out.println(f.getName());
        System.out.println(f.length());

        System.out.println("---------------------------------");

        //exists()：此File表示的文件或文件夹路径是否实际存在。
        //isDirectory()：此File表示的是否为文件夹目录。
        //isFile()：此File表示的是否为文件。

        System.out.println(f.exists());
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());

        //绝对路径：从盘符开始的路径，这是一个完整的路径。如"D:\\a.png";
        //相对路径：相对于某个东西而言的路径，这是一个便捷的路径，开发中经常使用。注意idea相对的是工作空间而不是工作空间下写的模块(也就是你在eclipse里面认为的项目),而eclipse相对的才是我们写的项目!!!

        String path2 = "D:\\a.png";

        System.out.println("---------------------------------");

        //createNewFile()：当且仅当具有该名称的文件不存在时，才创建一个新的空文件。
        //delete()：删除文件或文件夹 ,删除不走回收站,直接删除文件夹要求是空文件夹(有,先删里面,再删外面的)
        //mkdir()：创建单级文件夹,单级,单个文件夹,不管路径多么复杂
        //mkdirs()：创建多级文件夹,多个文件夹,不管路径是否存在,s复数,多个

        File f2 = new File("aaa.txt");
        System.out.println("是否存在aaa.txt:"+f2.exists());//false
        System.out.println("是否创建:"+f2.createNewFile());//true，放在当前目录下

        File f3= new File("newDir");
        System.out.println("是否存在newDir:"+f3.exists());//false
        System.out.println("是否创建:"+f3.mkdir());//true，当前项目目录下

        File f4= new File("newDira\\newDirb");
        System.out.println(f4.mkdirs());//true

        System.out.println(f2.delete());//true
        System.out.println(f3.delete());//true
        //不能直接删除多级文件夹，分两次删除，从内到外进行删除
        System.out.println(f4.delete());//true
        File f5 = new File("newDira");
        System.out.println("是否存在newDira:"+f5.exists());//true
        System.out.println(f5.delete());//true

        System.out.println("---------------------------------");

        //public String[] list()：列出,打开调用方法的文件夹,得到下面东西的名字,存到数组里
        //public File[] listFiles()：列出,打开调用方法的文件夹,得到下面东西的File类型的路径,存到数组里

        File dir = new File("D:\\JAVA\\Poject\\java\\src\\java_code");//自己本地的java_code的绝对路径

        System.out.println("是否存在newDira:"+dir.exists());

        if (dir.exists() == true){
            //打开文件夹得到下面东西的名字,多个,存到数组里面
            String[] names = dir.list();
            for(String name : names){
                System.out.println(name);
            }

            //打开文件夹得到下面东西的路径,File类型路径,File对象,File方法,更加方便
            File[] files = dir.listFiles();
            for (File file : files) {
                System.out.println(file);
            }
        }

    }
}


